连接字符串URI格式

        本文档描述了用于在官方MongoDB 驱动程序中定义应用程序和MongoDB实例之间的连接的URI格式。

标准连接字符串格式

        本节介绍用于连接到MongoDB数据库服务器的MongoDB连接URI的标准格式。所有官方MongoDB驱动程序的格式是一样的。有关驱动程序列表和驱动程序文档的链接,请参阅MongoDB驱动程序和客户端库

        以下是标准的URI连接方案:

1
mongodb:// [username:password @] host1 [:port1] [,host2 [:port2],... [,hostN [:portN]

        此字符串的组件是:

mongodb:// 用于标识这是标准连接格式的字符串的必需前缀。
username:password@ 可选的。如果指定,客户端将尝试在连接到mongod实例后使用这些凭据登录到特定数据库。
host1 需要。它标识要连接到的服务器地址。它标识主机名,IP地址或UNIX域套接字。对于副本集,请指定副本集配置mongod 中列出的实例的主机名。对于分片集群,请指定mongos实例的主机名 。
:port1 可选的。:27017如果未指定,则为默认值。
hostN 可选的。您可以根据需要指定任意数量的主机。您可以指定多个主机,例如,用于连接到副本集。对于副本集,请指定副本集配置mongod 中列出的实例的主机名。对于分片集群,请指定mongos实例的主机名 。
:portX 可选的。:27017如果未指定,则为默认值。/database可选的。要认证的数据库的名称,如果连接字符串包含的形式的认证凭证username:password@。如果/database未指定并且连接字符串包含凭据,则驱动程序将对admin数据库进行身份验证。
?options 连接特定选项。有关这些选项的完整描述,请参阅 连接字符串选项。如果连接字符串未指定数据库/,则必须/在最后一个hostN和开始于选项字符串的问号之间指定斜杠(即)。

        要test使用以下mongod主机描述与名为的副本集的连接:

  • db1.example.net在港口27017和
  • db2.example.net端口2500。

        将使用类似于以下内容的连接字符串:

1
mongodb://db1.example.net,db2.example.net:2500 /?replicaSet = test

        对于副本集,请指定副本集配置mongod 中列出的实例的主机名。

        要使用以下mongos主机描述与分片群集的连接:

  • r1.example.net在港口27017和
  • r2.example.net端口27017。

        将使用类似于以下内容的连接字符串:

1
mongodb://r1.example.net:27017,r2.example.net:27017 /

连接字符串选项

        本节列出了在标准连接字符串格式中使用的所有连接选项

        连接选项为以下形式的对:name=value。该 value永远是区分大小写的。使用&号(即&)字符分隔选项。在以下示例中,连接使用 replicaSet和connectTimeoutMS选项:

1
mongodb://db1.example.net,db2.example.net:2500 /?replicaSet = test&connectTimeoutMS = 300000

连接字符串参数的分号分隔符

        为了提供向后兼容性,驱动程序当前接受分号(即;)作为选项分隔符。

副本集选项

连接选项 描述
replicaSet 指定副本集的名称(如果 mongod是副本集的成员)。当连接到副本集时,重要的是给出至少两个mongod实例的种子列表。如果只提供单个mongod实例的连接点,并省略replicaSet,客户端将创建一个独立连接。

连接选项

连接选项 描述
ssl true:使用TLS / SSL启动连接。false:启动不使用TLS / SSL的连接。默认值为false。注意:ssl所有驱动程序不支持该选项。请参阅您的驱动程序文档和配置mongod和mongos的TLS / SSL文档。
connectTimeoutMS 超时前尝试连接的时间(以毫秒为单位)。默认是从不超时,虽然不同的驱动程序可能会有所不同。请参阅驱动程序 文档
socketTimeoutMS 在尝试超时之前尝试在套接字上发送或接收的时间(以毫秒为单位)。默认是从不超时,虽然不同的驱动程序可能会有所不同。请参阅 驱动程序文档

连接池选项

        大多数驱动程序实现某种连接池处理。某些驱动程序不支持连接池。有关连接池实现的更多信息,请参见驱动程序文档。这些选项允许应用程序在连接到MongoDB部署时配置连接池。

连接选项 描述
maxPoolSize 连接池中的最大连接数。默认值为100。
minPoolSize 连接池中的最小连接数。默认值为0。注意,minPoolSize所有驱动程序不支持该选项。有关您的驱动程序的信息,请参阅驱动程序文档。
maxIdleTimeMS 在删除和关闭之前,连接在池中保持空闲的最大毫秒数。此选项不受所有驱动程序支持。
waitQueueMultipl e驱动程序将maxPoolSize 值乘以的数字,以提供允许等待连接从池中可用的最大线程数。有关默认值,请参阅MongoDB驱动程序和客户端库 文档。
waitQueueTimeoutMS 线程可以等待连接变为可用的最大时间(以毫秒为单位)。有关默认值,请参阅MongoDB驱动程序和客户端库文档。

写关注选项

        写关注描述了mongod和驱动程序向应用程序提供的关于写操作的成功和持久性的保证类型。有关写入关注和写入操作的完整说明,请参阅 写入注意事项

        注意

        可以在连接字符串中指定写入注意事项,也可以将方法调用的参数指定为insert或update。如果在两个地方都指定了写入关注,方法参数将覆盖connection-string设置。

连接选项 描述
w 对应写入关注w选项。该w选项请求确认写操作已传播到指定数量的mongod实例或mongod指定标签的实例。您可以指定a number,字符串majority或a 。tag set。有关详细信息,请参见w选项。
wtimeoutMS 对应于写入关键字wtimeout。wtimeoutMS指定写入关注的时间限制(以毫秒为单位)。当wtimeoutMS是0,写操作永远不会超时。有关更多信息,请参阅wtimeout。
journal 对应于写入关注j选项选项。该 journal选项请求MongoDB确认写操作已写入 日志。有关详细信息,请参阅j选项。如果设置journal为true,并指定w小于1 的 值,则journal优先。在2.6版更改:如果设置journal为true,并且 mongod没有启用日记功能,如storage.journal.enabled,然后MongoDB将会报错。在以前的版本中,MongoDB将提供基本接收确认(即w:1),忽略journal,并jnote在其返回文档中包含一个字段。

readConcern选项

        3.2版本中的新功能:对于WiredTiger存储引擎,MongoDB 3.2为副本集和副本集分片引入了readConcern选项。

        读取关注允许客户端为其从副本集的读取选择隔离级别。

连接选项 描述
readConcernLevel 隔离的水平。接受”local”或 “majority”。有关详细信息,请参阅阅读关注。

读取首选项

        读取首选项描述了关于副本集的读取操作的行为。这些参数允许您在连接字符串中基于每个连接指定读取首选项:

连接选项 描述
readPreference 指定此连接的副本集读取首选项。读取首选项值如下:primary、primaryPreferred、secondary、secondaryPreferred、nearest。有关每个值的说明,请参阅 阅读首选项模式。默认值为primary,将所有读取操作发送到副本集的主数据库。
maxStalenessSeconds 新版本3.4。指定辅助节点在客户端停止将其用于读取操作之前的陈旧时间(秒)。有关详细信息,请参阅:maxStalenessSeconds。默认情况下,没有最大过期,客户端在选择读取操作的位置时不会考虑次要的延迟。最小值maxStalenessSeconds为90秒。指定0和90秒之间的值将产生错误。MongoDB驱动程序将maxStalenessSeconds值-1视为“no max staleness”,与 maxStalenessSeconds省略时相同。重要。要使用maxStalenessSeconds,部署中的所有MongoDB实例必须使用MongoDB 3.4或更高版本。如果任何实例在早期版本的MongoDB上,驱动程序或mongos将引发错误。以下指定secondary读取首选项模式的maxStalenessSeconds值为120秒:mongodb://host.example.com/?readPreference = secondary&maxStalenessSeconds = 120
readPreferenceTags 指定标记集,以逗号分隔的冒号分隔的键值对列表。例如:dc:ny,rack:1 要指定标记集的列表,请使用多个 readPreferenceTags。以下指定两个标记集和一个空标记集:readPreferenceTags = dc:ny,rack:1&readPreferenceTags = dc:ny&readPreferenceTags = 使用多个时订单重要readPreferenceTags。

验证选项

连接选项|描述
authSource|指定与用户凭据关联的数据库名称。authSource默认为在连接字符串中指定的数据库。对于将凭证存储委托给其他服务的身份验证机制,该authSource值应 $external与PLAIN(LDAP)和GSSAPI (Kerberos)身份验证机制相同。authSource如果连接字符串指定没有用户名,MongoDB将忽略值。
authMechanism|改变在2.6版本:为新增支持PLAIN和MONGODB-X509 认证机制。在版本3.0中更改:添加对SCRAM-SHA-1身份验证机制的支持。指定MongoDB将用来认证连接的认证机制。可能的值包括:SCRAM-SHA-1、MONGODB-CR、MONGODB-X509、GSSAPI(Kerberos)、PLAIN(LDAP SASL)、只有MongoDB Enterprise mongod和mongos 实例提供GSSAPI(Kerberos)和PLAIN(LDAP)机制。要使用MONGODB-X509,您必须启用TLS / SSL。有关MongoDB中的身份验证系统的详细信息,请参阅身份验证。还要考虑 使用x.509证书来认证客户端以获取有关x509 身份验证的更多信息。
gssapiServiceName|连接到Kerberos MongoDB实例时设置Kerberos服务名称。此值必须与在MongoDB实例上设置的服务名称匹配。gssapiServiceName默认mongodb为所有客户端和MongoDB实例。如果更改saslServiceNameMongoDB实例上的设置,则需要设置gssapiServiceName为相同的值。

服务器选择和发现选项

        MongoDB提供以下选项来配置MongoDB驱动程序和实例如何mongos选择要将读取或写入操作定向到的服务器。

连接选项 描述
localThresholdMS 用于在多个合适的MongoDB实例之间进行选择的延迟窗口的大小(以毫秒为单位)。默认值:15毫秒。所有驱动程序使用localThresholdMS。localThreshold指定延迟窗口大小时使用 别名mongos。
serverSelectionTimeoutMS 指定在抛出异常之前阻止服务器选择的时间长度(以毫秒为单位)。默认值:30,000毫秒。
serverSelectionTryOnce 仅限单线程驱动程序。When true,指示驱动程序在服务器选择失败之后一次扫描MongoDB部署,然后选择服务器或引发错误。当时false,驱动程序阻止并搜索一个服务器,直到该serverSelectionTimeoutMS值。 默认值:true。多线程驱动程序和mongos不支持 serverSelectionTryOnce。
heartbeatFrequencyMS heartbeatFrequencyMS控制驱动程序检查MongoDB部署的状态。指定检查之间的间隔(以毫秒为单位),从上一个检查结束开始计算,直到下一个检查结束。默认值:单线程驱动程序:60秒。多线程驱动程序:10秒。mongos 不支持更改心跳检查的频率。

其他配置

连接选项 描述
uuidRepresentation 可能的值为:standard标准二进制表示。csharpLegacy。C#驱动程序的默认表示。javaLegacy。Java驱动程序的默认表示。pythonLegacy。Python驱动程序的默认表示。有关默认值,请参阅驱动程序的驱动程序 文档。注意:并不是所有的驱动程序都支持该uuidRepresentation 选项。有关您的驱动程序的信息,请参阅驱动程序文档。

        示例

        以下提供了公共连接目标的示例URI字符串。

数据库服务器在本地运行

        以下连接到在默认端口上本地运行的数据库服务器:

1
mongodb:// localhost

admin数据库

        以下以具有密码的admin用户身份连接并登录到数据库 :sysopmoon

1
mongodb:// sysop:moon @ localhost

records数据库

        以下以具有密码的records用户身份连接并登录到数据库 :sysopmoon

1
mongodb:// sysop:moon @ localhost / records

Unix域套接字

        连接到UNIX域套接字时,请使用URL编码的连接字符串。

        以下连接到具有文件路径的UNIX域套接字 /tmp/mongodb-27017.sock:

1
mongodb://%2Ftmp%2Fmongodb-27017.sock

        注意

        并非所有驱动程序都支持UNIX域套接字。有关您的驱动程序的信息,请参阅驱动程序 文档。

不同机器上的成员的副本集

        以下连接到具有两个成员的副本集,一个打开 db1.example.net,另一个打开db2.example.net:

        注意

        对于副本集,请指定副本集配置mongod 中列出的实例的主机名。

1
mongodb://db1.example.net,db2.example.com/?replicaSet = test

复制集与成员上localhost

        下面连接到具有三个成员上运行副本集localhost上的端口27017,27018以及27019:

        注意

        对于副本集,请指定副本集配置mongod 中列出的实例的主机名。

1
mongodb:// localhost,localhost:27018,localhost:27019 /?replicaSet = test

读分配的副本集

        以下连接到具有三个成员的副本集,并将读取分发给辅助节点:

        *注意

        对于副本集,请指定副本集配置mongod 中列出的实例的主机名。

1
mongodb://example1.com,example2.com,example3.com/?replicaSet = test&readPreference = secondary

具有高级写入关注的副本集

        以下连接到具有写入关注的副本集,配置为等待复制在至少两个成员上成功,具有两秒超时。

        注意

        对于副本集,请指定副本集配置mongod 中列出的实例的主机名。

1
mongodb://example1.com,example2.com,example3.com/?replicaSet = test&w = 2&wtimeoutMS = 2000

集群

        以下连接到具有三个mongos实例的分片集群:

1
mongodb://router1.example.com:27017,router2.example2.com:27017,router3.example3.com:27017 /